機械力学テキスト 12章 ロボットシミュレーション

プログラム例と実習

宇都宮大学 吉田 勝俊

重要な注意

  • このNotebookを開いただけの状態では,編集結果は保存されないので,各自,「ファイル」メニューから「ドライブにコピーを保存」してください.
  • 操作方法の詳細は Python / Colab 超入門 で勉強してください.

1.使用するライブラリの読込

In [1]:
#この枠をクリックしてアクティブにしてから,Shiftを押しながらEnterを押すと,枠内のコードが実行されます.以下同じです.
# '#'記号のあとの内容を「コメントアウト」と呼び,実行時に無視されます.

import numpy as np                 #数値計算ライブラリ
from math import sin, cos          #低機能だが計算が速い三角関数
from scipy.integrate import odeint #常微分方程式ライブラリ
import matplotlib.pyplot as plt    #グラフ作成ライブラリ
from matplotlib.animation import FuncAnimation #アニメーションライブラリ
from matplotlib import rc          #グラフ調整ライブラリ
from IPython.display import HTML   #ユーザーインターフェース拡張ライブラリ

2.運動方程式の数値解を求める関数

パラメータの設定

In [2]:
M = 2/3 #台車の質量
m = 1/3 #振り子の質量
l = 1   #振り子の長さ

数値解を求める関数

In [3]:
def Solve(xx0, force):
    
    ### 運動方程式を1階化した微分方程式の定義
    def eom(xx,t):
        #注 python は配列の添字が0から
        x   = xx[0] #台車の変位
        dx  = xx[1] #台車の速度
        th  = xx[2] #振り子の角度
        dth = xx[3] #振り子の角速度
    
        ft = force(xx) #制御力
    
        A = np.array( #行列
            [
                [M+m,        m*l*cos(th)],
                [np.cos(th), l]
            ]
        )
    
        bb = np.array( #右辺のベクトル
            [m*l*(dth**2)*sin(th)+ft, 9.8*sin(th)]
        )
    
        A_inv = np.linalg.inv(A) #逆行列
        hh = np.dot(A_inv, bb)   #逆行列とベクトルの積
    
        dxx = np.array( #1階微分のベクトル
            [dx, hh[0], dth, hh[1]]
        )
    
        return dxx
    ###ここまで
    
    ### 時間軸を表す等差数列
    n = 200 #時刻の数
    ts = np.linspace(0, 25, n) #0秒から25秒までn等分
    
    ### 差分解法(数値積分)
    xxs = odeint(eom, xx0, ts)

    return (ts,xxs)

3.実際に数値解を求める

外力を与える関数(ひとまず外力は0にしておく)

In [4]:
def force(xx):
    return 0

初期値の設定(ちょっと傾いて静止)

In [5]:
xx0 = np.array([0, 0, 0.5, 0]) #時刻t=0 のx, dx, th, dth

そのときの数値解を求める

In [6]:
ts, xxs = Solve(xx0, force)
  • ベクトル xx := (x, dx, th, dth) を **状態ベクトル** という.

In [7]:
print(xxs) #各行が状態ベクトル,下に向かって時間が進行
[[ 0.00000000e+00  0.00000000e+00  5.00000000e-01  0.00000000e+00]
 [-1.45097140e-02 -2.29475042e-01  5.50313830e-01  8.07669267e-01]
 [-5.64122983e-02 -4.26770304e-01  7.05825770e-01  1.68223777e+00]
 [-1.16346447e-01 -4.92159399e-01  9.76361214e-01  2.63637627e+00]
 [-1.66925480e-01 -2.42464559e-01  1.37147983e+00  3.67371700e+00]
 [-1.54592549e-01  5.49443555e-01  1.90944830e+00  4.96162417e+00]
 [ 6.50731154e-04  1.99395897e+00  2.64381561e+00  6.80806131e+00]
 [ 2.93129173e-01  2.13509016e+00  3.55306781e+00  6.98859576e+00]
 [ 4.66609604e-01  6.67054939e-01  4.31070285e+00  5.11845023e+00]
 [ 4.89264856e-01 -1.91897070e-01  4.86505728e+00  3.78555189e+00]
 [ 4.42077732e-01 -4.84936158e-01  5.27323122e+00  2.73511885e+00]
 [ 3.81461910e-01 -4.41644839e-01  5.55574513e+00  1.77396158e+00]
 [ 3.37135159e-01 -2.51493849e-01  5.72224853e+00  8.91025034e-01]
 [ 3.19761785e-01 -2.31264481e-02  5.78269075e+00  7.90789826e-02]
 [ 3.31395666e-01  2.07198175e-01  5.74245632e+00 -7.25031957e-01]
 [ 3.70790917e-01  4.10666906e-01  5.59783169e+00 -1.59133032e+00]
 [ 4.29778753e-01  4.96287029e-01  5.33918614e+00 -2.53831958e+00]
 [ 4.83221708e-01  2.87680595e-01  4.95696887e+00 -3.56409634e+00]
 [ 4.80386372e-01 -4.39426811e-01  4.43485150e+00 -4.81145237e+00]
 [ 3.42966888e-01 -1.84231713e+00  3.72332776e+00 -6.61506024e+00]
 [ 5.39938410e-02 -2.25967892e+00  2.81855898e+00 -7.14879650e+00]
 [-1.37873343e-01 -7.92287667e-01  2.03752189e+00 -5.28233666e+00]
 [-1.71702422e-01  1.35737117e-01  1.46619048e+00 -3.89991697e+00]
 [-1.28463581e-01  4.74403271e-01  1.04478653e+00 -2.83458897e+00]
 [-6.74544625e-02  4.55139113e-01  7.50206891e-01 -1.86647610e+00]
 [-2.07994500e-02  2.73199790e-01  5.72607164e-01 -9.75142354e-01]
 [-5.78071434e-04  4.62401017e-02  5.01978792e-01 -1.58241399e-01]
 [-9.32688029e-03 -1.84710202e-01  5.32173754e-01  6.43063048e-01]
 [-4.61431069e-02 -3.93475673e-01  6.66013623e-01  1.50126090e+00]
 [-1.03942838e-01 -4.97529548e-01  9.12859882e-01  2.44092424e+00]
 [-1.59749657e-01 -3.27781489e-01  1.28231236e+00  3.45640785e+00]
 [-1.65615890e-01  3.36888080e-01  1.78905923e+00  4.66745794e+00]
 [-4.54138791e-02  1.68530453e+00  2.47835786e+00  6.41609397e+00]
 [ 2.36697758e-01  2.36122192e+00  3.37435446e+00  7.27998401e+00]
 [ 4.46759019e-01  9.25032783e-01  4.17852925e+00  5.45356060e+00]
 [ 4.92636777e-01 -7.37388490e-02  4.76748490e+00  4.01716253e+00]
 [ 4.53931393e-01 -4.60343331e-01  5.20231779e+00  2.93484729e+00]
 [ 3.92841970e-01 -4.67091130e-01  5.50905009e+00  1.95975310e+00]
 [ 3.43968718e-01 -2.94528616e-01  5.69785092e+00  1.06005712e+00]
 [ 3.20919208e-01 -6.93258252e-02  5.77873133e+00  2.37570351e-01]
 [ 3.26776496e-01  1.62053034e-01  5.75854551e+00 -5.61705245e-01]
 [ 3.60952581e-01  3.75329528e-01  5.63539048e+00 -1.41204494e+00]
 [ 4.17344609e-01  4.96096035e-01  5.40025058e+00 -2.34417870e+00]
 [ 4.75043155e-01  3.63002693e-01  5.04344082e+00 -3.35040071e+00]
 [ 4.88845189e-01 -2.41646823e-01  4.55163553e+00 -4.52912913e+00]
 [ 3.85121861e-01 -1.52701299e+00  3.88382784e+00 -6.21613478e+00]
 [ 1.12940386e-01 -2.43347955e+00  3.00051747e+00 -7.37369444e+00]
 [-1.14701942e-01 -1.06498311e+00  2.17397825e+00 -5.63219272e+00]
 [-1.73520849e-01  5.65429473e-03  1.56669681e+00 -4.13767621e+00]
 [-1.39963021e-01  4.42539348e-01  1.11820780e+00 -3.03597788e+00]
 [-7.91311908e-02  4.77333189e-01  7.99234737e-01 -2.05376541e+00]
 [-2.81646383e-02  3.15410938e-01  5.99128668e-01 -1.14579936e+00]
 [-2.31129628e-03  9.23704138e-02  5.07922590e-01 -3.17148784e-01]
 [-5.27269054e-03 -1.39259215e-01  5.18119554e-01  4.80894423e-01]
 [-3.67565252e-02 -3.56347564e-01  6.30685985e-01  1.32369030e+00]
 [-9.15420242e-02 -4.92188232e-01  8.54214822e-01  2.24808272e+00]
 [-1.50687413e-01 -3.93573428e-01  1.19849218e+00  3.24585437e+00]
 [-1.71689792e-01  1.53488448e-01  1.67573649e+00  4.39594685e+00]
 [-8.36208497e-02  1.37053646e+00  2.32284340e+00  6.01873541e+00]
 [ 1.75965437e-01  2.47144194e+00  3.19007852e+00  7.42304925e+00]
 [ 4.20090206e-01  1.21155558e+00  4.03760373e+00  5.81798270e+00]
 [ 4.92752381e-01  6.87713869e-02  4.66396098e+00  4.26188083e+00]
 [ 4.64986040e-01 -4.20768447e-01  5.12636546e+00  3.13808863e+00]
 [ 4.04775645e-01 -4.85685713e-01  5.45767012e+00  2.14848708e+00]
 [ 3.51857347e-01 -3.35764495e-01  5.66918427e+00  1.23239095e+00]
 [ 3.23230118e-01 -1.15354957e-01  5.77079663e+00  3.97057052e-01]
 [ 3.23293546e-01  1.16359279e-01  5.77057837e+00 -4.00561985e-01]
 [ 3.52041410e-01  3.36641956e-01  5.66850876e+00 -1.23619922e+00]
 [ 4.05041643e-01  4.86005491e-01  5.45649316e+00 -2.15264720e+00]
 [ 4.65216181e-01  4.19722234e-01  5.12464682e+00 -3.14258063e+00]
 [ 4.92714007e-01 -7.21760646e-02  4.66162703e+00 -4.26740634e+00]
 [ 4.19425601e-01 -1.21810590e+00  4.03441741e+00 -5.82626580e+00]
 [ 1.74612927e-01 -2.47226550e+00  3.18601575e+00 -7.42412138e+00]
 [-8.43687563e-02 -1.36376919e+00  2.31955178e+00 -6.01019841e+00]
 [-1.71772465e-01 -1.49789006e-01  1.67333215e+00 -4.39022963e+00]
 [-1.50471314e-01  3.94808844e-01  1.19671689e+00 -3.24131081e+00]
 [-9.12722949e-02  4.91964305e-01  8.52985444e-01 -2.24389362e+00]
 [-3.65612605e-02  3.55500194e-01  6.29962355e-01 -1.31984486e+00]
 [-5.19621316e-03  1.38259872e-01  5.17856978e-01 -4.77371189e-01]
 [-2.36150493e-03 -9.33767622e-02  5.08096587e-01  3.20635962e-01]
 [-2.83367868e-02 -3.16312421e-01  5.99755991e-01  1.14956787e+00]
 [-7.93917416e-02 -4.77739111e-01  8.00358740e-01  2.05789239e+00]
 [-1.40204188e-01 -4.41672002e-01  1.11986905e+00  3.04042105e+00]
 [-1.73522487e-01 -2.53481537e-03  1.56896080e+00  4.14302621e+00]
 [-1.14117236e-01  1.07125842e+00  2.17706025e+00  5.64016928e+00]
 [ 1.14272444e-01  2.43588634e+00  3.00455055e+00  7.37682095e+00]
 [ 3.85955748e-01  1.52011536e+00  3.88722477e+00  6.20743058e+00]
 [ 4.88977011e-01  2.37646335e-01  4.55411074e+00  4.52320295e+00]
 [ 4.74845043e-01 -3.64434764e-01  5.04527186e+00  3.34580128e+00]
 [ 4.17074134e-01 -4.95975495e-01  5.40153153e+00  2.33996431e+00]
 [ 3.60748331e-01 -3.74516303e-01  5.63616186e+00  1.40816471e+00]
 [ 3.26688920e-01 -1.61059233e-01  5.75885208e+00  5.58162278e-01]
 [ 3.20958144e-01  7.03340906e-02  5.77860099e+00 -2.41042167e-01]
 [ 3.44130754e-01  2.95451273e-01  5.69727096e+00 -1.06378619e+00]
 [ 3.93098244e-01  4.67575983e-01  5.50797833e+00 -1.96384548e+00]
 [ 4.54183707e-01  4.59645733e-01  5.20071308e+00 -2.93924670e+00]
 [ 4.92677302e-01  7.08938589e-02  4.76528853e+00 -4.02235630e+00]
 [ 4.46253002e-01 -9.30998750e-01  4.17554733e+00 -5.46121002e+00]
 [ 2.35407622e-01 -2.36503239e+00  3.37037529e+00 -7.28491875e+00]
 [-4.63317325e-02 -1.67839014e+00  2.47485444e+00 -6.40734909e+00]
 [-1.65797634e-01 -3.32576145e-01  1.78651055e+00 -4.66130053e+00]
 [-1.59568906e-01  3.29420753e-01  1.28042499e+00 -3.45174348e+00]
 [-1.03669740e-01  4.97521735e-01  9.11527273e-01 -2.43668435e+00]
 [-4.59270189e-02  3.92702388e-01  6.65194360e-01 -1.49734559e+00]
 [-9.22487504e-03  1.83724048e-01  5.31823327e-01 -6.39496590e-01]
 [-6.02219212e-04 -4.72488770e-02  5.02066176e-01  1.61702727e-01]
 [-2.09475398e-02 -2.74139509e-01  5.73140964e-01  9.78834874e-01]
 [-6.77018155e-02 -4.55694258e-01  7.51227819e-01  1.87053504e+00]
 [-1.28721105e-01 -4.73863889e-01  1.04633650e+00  2.83895151e+00]
 [-1.71774283e-01 -1.33152209e-01  1.46832271e+00  3.90497570e+00]
 [-1.37437264e-01  7.97931204e-01  2.04041006e+00  5.28966147e+00]
 [ 5.52315528e-02  2.26464388e+00  2.82246671e+00  7.15519713e+00]
 [ 3.43973397e-01  1.83553751e+00  3.72693976e+00  6.60645194e+00]
 [ 4.80627015e-01  4.34792942e-01  4.43747864e+00  4.80503687e+00]
 [ 4.83065875e-01 -2.89537162e-01  4.95891493e+00  3.55935360e+00]
 [ 4.29509449e-01 -4.96399776e-01  5.34057183e+00  2.53405122e+00]
 [ 3.70568664e-01 -4.09937326e-01  5.59870002e+00  1.58737790e+00]
 [ 3.31284702e-01 -2.06219595e-01  5.74285137e+00  7.21437418e-01]
 [ 3.19776719e-01  2.41368250e-02  5.78264643e+00 -8.25351294e-02]
 [ 3.37274904e-01  2.52449366e-01  5.72176045e+00 -8.94684003e-01]
 [ 3.81705506e-01  4.42264546e-01  5.55477442e+00 -1.77798738e+00]
 [ 4.42344720e-01  4.84546718e-01  5.27173516e+00 -2.73944931e+00]
 [ 4.89371171e-01  1.89561977e-01  4.86298699e+00 -3.79049354e+00]
 [ 4.66245696e-01 -6.72367553e-01  4.30790355e+00 -5.12546073e+00]
 [ 2.91962831e-01 -2.14092575e+00  3.54924631e+00 -6.99608162e+00]
 [-4.35087540e-04 -1.98751165e+00  2.64009709e+00 -6.79983618e+00]
 [-1.54889278e-01 -5.44478117e-01  1.90673851e+00 -4.95492650e+00]
 [-1.66790166e-01  2.44550490e-01  1.36947345e+00 -3.66888279e+00]
 [-1.16075136e-01  4.92403070e-01  9.74921671e-01 -2.63207719e+00]
 [-5.61769585e-02  4.26091397e-01  7.04907683e-01 -1.67824772e+00]
 [-1.43822730e-02  2.28506727e-01  5.49873730e-01 -8.04042837e-01]
 [ 2.01686946e-06 -1.01073076e-03  5.00001457e-01  3.45620029e-03]
 [-1.46331396e-02 -2.30443199e-01  5.50756954e-01  8.11298292e-01]
 [-5.66435015e-02 -4.27447069e-01  7.06747289e-01  1.68623148e+00]
 [-1.16613101e-01 -4.91909323e-01  9.77804659e-01  2.64067941e+00]
 [-1.67054998e-01 -2.40366386e-01  1.37349081e+00  3.67855898e+00]
 [-1.54288063e-01  5.54427782e-01  1.91216424e+00  4.96833972e+00]
 [ 1.74577609e-03  2.00039177e+00  2.64754190e+00  6.81626943e+00]
 [ 2.94298058e-01  2.12921777e+00  3.55688849e+00  6.98106412e+00]
 [ 4.66975645e-01  6.61752218e-01  4.31350066e+00  5.11144652e+00]
 [ 4.89161897e-01 -1.94223337e-01  4.86712650e+00  3.78061019e+00]
 [ 4.41815056e-01 -4.85319314e-01  5.27472595e+00  2.73078517e+00]
 [ 3.81223239e-01 -4.41021659e-01  5.55671409e+00  1.76993273e+00]
 [ 3.37000650e-01 -2.50536529e-01  5.72273449e+00  8.87362840e-01]
 [ 3.19752280e-01 -2.21146154e-02  5.78273244e+00  7.56177114e-02]
 [ 3.31512229e-01  2.08177858e-01  5.74205784e+00 -7.28634149e-01]
 [ 3.71018793e-01  4.11395420e-01  5.59695886e+00 -1.59529197e+00]
 [ 4.30053254e-01  4.96168029e-01  5.33779474e+00 -2.54259791e+00]
 [ 4.83381474e-01  2.85809617e-01  4.95501570e+00 -3.56885266e+00]
 [ 4.80147186e-01 -4.44085858e-01  4.43221486e+00 -4.81789359e+00]
 [ 3.41958883e-01 -1.84910227e+00  3.71970292e+00 -6.62367627e+00]
 [ 5.27605304e-02 -2.25465904e+00  2.81464605e+00 -7.14232544e+00]
 [-1.38302949e-01 -7.86646324e-01  2.03463132e+00 -5.27500897e+00]
 [-1.71624690e-01  1.38316026e-01  1.46405638e+00 -3.89485188e+00]
 [-1.28200985e-01  4.74936364e-01  1.04323569e+00 -2.83021745e+00]
 [-6.72027529e-02  4.54579066e-01  7.49186208e-01 -1.86240869e+00]
 [-2.06475236e-02  2.72256434e-01  5.72074616e-01 -9.71441864e-01]
 [-5.50517372e-04  4.52280549e-02  5.01893730e-01 -1.54770784e-01]
 [-9.42586963e-03 -1.85699235e-01  5.32527814e-01  6.46641235e-01]
 [-4.63564442e-02 -3.94249794e-01  6.66838145e-01  1.50519014e+00]
 [-1.04212972e-01 -4.97532321e-01  9.14199571e-01  2.44517896e+00]
 [-1.59926225e-01 -3.26127395e-01  1.28420883e+00  3.46109065e+00]
 [-1.65427282e-01  3.41228423e-01  1.79162002e+00  4.67364670e+00]
 [-4.44852843e-02  1.69223961e+00  2.48187799e+00  6.42486632e+00]
 [ 2.37993933e-01  2.35734183e+00  3.37834435e+00  7.27496013e+00]
 [ 4.47267206e-01  9.19060074e-01  4.18151700e+00  5.44589909e+00]
 [ 4.92598246e-01 -7.65819606e-02  4.76968573e+00  4.01195714e+00]
 [ 4.53681520e-01 -4.61036204e-01  5.20392536e+00  2.93043426e+00]
 [ 3.92588761e-01 -4.66601447e-01  5.51012302e+00  1.95564776e+00]
 [ 3.43810289e-01 -2.93602044e-01  5.69843051e+00  1.05631627e+00]
 [ 3.20884342e-01 -6.83139926e-02  5.77885980e+00  2.34086046e-01]
 [ 3.26868577e-01  1.63050111e-01  5.75823538e+00 -5.65263037e-01]
 [ 3.61161644e-01  3.76143965e-01  5.63461352e+00 -1.41594227e+00]
 [ 4.17619723e-01  4.96211868e-01  5.39896182e+00 -2.34841147e+00]
 [ 4.75244701e-01  3.61555289e-01  5.04159951e+00 -3.35502178e+00]
 [ 4.88713952e-01 -2.45678069e-01  4.54914666e+00 -4.53508969e+00]
 [ 3.84283971e-01 -1.53394363e+00  3.88041190e+00 -6.22488050e+00]
 [ 1.11607326e-01 -2.43099680e+00  2.99646926e+00 -7.37046893e+00]
 [-1.15282464e-01 -1.05869465e+00  2.17088777e+00 -5.62419624e+00]
 [-1.73514356e-01  8.77427491e-03  1.56442637e+00 -4.13231038e+00]
 [-1.39717290e-01  4.43402189e-01  1.11654219e+00 -3.03151733e+00]
 [-7.88667624e-02  4.76921334e-01  7.98108554e-01 -2.04962164e+00]
 [-2.79893433e-02  3.14503929e-01  5.98501191e-01 -1.14201541e+00]
 [-2.25861165e-03  9.13589960e-02  5.07750382e-01 -3.13645971e-01]
 [-5.34731919e-03 -1.40263387e-01  5.18386021e-01  4.84435754e-01]
 [-3.69504507e-02 -3.57197777e-01  6.31415954e-01  1.32755663e+00]
 [-9.18104271e-02 -4.92408755e-01  8.55453267e-01  2.25229440e+00]
 [-1.50901082e-01 -3.92322965e-01  1.20027953e+00  3.25042389e+00]
 [-1.71601752e-01  1.57220688e-01  1.67815682e+00  4.40170292e+00]
 [-8.28623284e-02  1.37734787e+00  2.32615726e+00  6.02732752e+00]
 [ 1.77327513e-01  2.47054124e+00  3.19416219e+00  7.42187652e+00]
 [ 4.20757514e-01  1.20498109e+00  4.04080219e+00  5.80966709e+00]
 [ 4.92791844e-01  6.53613541e-02  4.66630394e+00  4.25633290e+00]
 [ 4.64756877e-01 -4.21811941e-01  5.12809027e+00  3.13357355e+00]
 [ 4.04511218e-01 -4.85359879e-01  5.45885035e+00  2.14430426e+00]
 [ 3.51675651e-01 -3.34880683e-01  5.66986029e+00  1.22856142e+00]
 [ 3.23169847e-01 -1.14344341e-01  5.77101273e+00  3.93530233e-01]
 [ 3.23360925e-01  1.17369905e-01  5.77035501e+00 -4.04092271e-01]
 [ 3.52230141e-01  3.37523942e-01  5.66782467e+00 -1.24003754e+00]
 [ 4.05312506e-01  4.86322612e-01  5.45530361e+00 -2.15684073e+00]]

4.数値解の振動波形を確認する

振動波形を描く関数

In [8]:
def Plot_Wave(ts, xxs):
    plt.plot(ts,xxs[:,0],label='x')        #台車の変位
    plt.plot(ts,xxs[:,1],label='dx/dt')    #台車の速度
    plt.plot(ts,xxs[:,2],label='th')       #振り子の角度
    plt.plot(ts,xxs[:,3],label='d(th)/dt') #振り子の角速度
    plt.xlabel('t')
    plt.ylabel('States')
    plt.legend()

数値解の振動波形

In [9]:
Plot_Wave(ts, xxs)

5.数値解からアニメーションを作る

数値解をアニメーションする関数

In [10]:
def Animate(xxs, title='xxxxxxX'):
    
    ### アニメーション用のグラフ用紙を用意する
    fig, ax = plt.subplots(figsize=(8,3)) #グラフ用紙を作る
    plt.close() #ひとまず表示OFF
    ax.set_xlim(-4,4)      #グラフの縦軸の範囲
    ax.set_ylim(-1.5,1.5)  #グラフの横軸の範囲
    ax.grid()              #グリッドon
    ax.set_xlabel('X')     #横軸のラベル
    ax.set_ylabel('Y')     #縦軸のラベル
    ax.set_title(title)    #タイトル(学籍番号)
    line1, = ax.plot([], [], lw=2) #空の描画

    ### i 行目の状態ベクトルで描画データを更新する関数
    def update_anim(i):
        x = xxs[i,0]  #さっき計算したxxsの1列目(台車変位,添字は0)
        th = xxs[i,2] #さっき計算したxxsの3列目(振子角度,添字は2)
        #振り子支点の位置ベクトル
        XM = np.array([x, 0])
        #振り子先端の位置ベクトル
        Xm = XM + l*np.array([sin(th), cos(th)])
        #振り子の線分を描画    
        line1.set_data([XM[0],Xm[0]],[XM[1],Xm[1]]) #座標データの更新

    ### アニメーションデータの作成
    n = len(xxs) #データの行数(時間きざみの総数)
    anim = FuncAnimation(fig, update_anim, interval=100, frames=n)

    ### アニメーションの出力形式の設定
    rc('animation', html='jshtml')
    
    return anim

実際にアニメーションする

  • 表示されるまで少し計算時間がかかる.
  • 表示されたら,再生ボタンを押すと,アニメーションが始まる.
In [11]:
Animate(xxs)
Out[11]:


Once Loop Reflect
  • こうしたシミュレーションでは,運動方程式に書いてない効果は,当然,再現されない.
    • 重力に抗する力は与えていないので,振り子は落下し,それに連動して台車も動く.
    • 床を作成していないので,振り子は下まで落ちて,スイングする.
    • 摩擦や空気抵抗がないので,スイングは持続する.

実習12.1(改)

  • 最初から順に実行して,ここまでくれば,実習12.1は完了しています.

実習12.2(改)

  • 次のコードセルのforcexx0を,
def force(xx):
    return 20*xx[2]

xx0 = np.array([0, -3, 0.5, 1.2])

のように書き換えて実行せよ.

In [12]:
def force(xx):
    return 0

xx0 = np.array([0, 0, 0.5, 0])

ts, xxs = Solve(xx0, force)
Animate(xxs)
Out[12]:


Once Loop Reflect

実習12.3(改)

  • 次のコードセルのforcexx0を,
def force(xx):
    return 20*xx[2] + 2*xx[3]

xx0 = np.array([0, -3, 0.3, 1.2])

のように書き換えて実行せよ.

In [13]:
def force(xx):
    return 0

xx0 = np.array([0, 0, 0.5, 0])

ts, xxs = Solve(xx0, force)
Animate(xxs)
Out[13]:


Once Loop Reflect

実習12.4(改)

  • 次のコードセルのKLの数値を自分で書き換え(必要ならxx0も),次の2種類の運動を実現せよ.

    (1) 振動しながら立位に向う運動.
    (2) 振動しないで立位に向う運動.

In [14]:
def force(xx):
    K = 20
    L = 2
    return K*xx[2] + L*xx[3]

xx0 = np.array([0, -3, 0.3, 1.2])

ts, xxs = Solve(xx0, force)
Animate(xxs)
Out[14]:


Once Loop Reflect